﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnisysMassiveImporter_v2.Entidades.Documentos;
using UnisysMassiveImporter_v2.Entidades.Configuracion;
using UnisysMassiveImporter_v2.Entidades.Mensajes;
namespace UnisysMassiveImporter_v2.Negocio.InfoImage
{    
    /// <summary>
    /// 
    /// </summary>
    public class UpDocuments
    {
        

        /// <summary>
        /// 
        /// </summary>
        /// <param name="documents"></param>
        public MailMessage process(System.Collections.ArrayList documents, ref Configuration appConfig, ref Thread_Config threadConfig)
        {
            InfoMessage infoMessage = new InfoMessage();
            MailMessage result = new MailMessage();
           
            #region Conexion IIF
            IIF_WorkItem _infoImage = new IIF_WorkItem( );
            
            infoMessage.sendMessage("Inicio de procesamiento de documentos...", InfoMessage.Information_Message, 560, threadConfig.Name,ref appConfig);

            infoMessage.sendMessage("Intentando conectar a IIF con el usuario: " + threadConfig.IIFUser, InfoMessage.Information_Message, 561, threadConfig.Name, ref appConfig);
            if (_infoImage.CreateIIFClient(threadConfig.IIFUser, threadConfig.IIFPassword, threadConfig.IIFDomain,ref appConfig,ref threadConfig))
            {
                infoMessage.sendMessage("Conexión con IIF establecida: usuario: " + threadConfig.IIFUser + " conectado con éxito", InfoMessage.Success_Message, 260, threadConfig.Name, ref appConfig);
                infoMessage.sendMessage("Intentando subir los documentos a IIF", InfoMessage.Information_Message, 570, threadConfig.Name, ref appConfig);

                for (int i = 0; i < documents.Count; i++)
                {
                    Document document = (Document)documents[i];
                    Archivos.Manipulacion_Archivos files = new Archivos.Manipulacion_Archivos();
                    try
                    {
                        files.getImages(document, ref appConfig, ref threadConfig);
                    }
                    catch (Exception e)
                    {
                        FileMessage fMessage = new FileMessage();
                        fMessage.sendMessage("El archivo:"+document.filePath+" tiene problemas con las imagenes asociadas",e,document.filePath,FileMessage.IO_Error,104,threadConfig.Name,ref appConfig);
                        result.documentsNoOk++;
                        continue;
                    }
                    if (_infoImage.CreateWorkItem(document,ref appConfig,ref threadConfig))
                    {
                       
                        result.documentsOk++;
                        if (appConfig.historyGeneration)
                        {
                            files.historyImagesGeneration(document, ref appConfig,ref threadConfig);
                        }
                        else
                        {
                            //no generar historico, eliminando archivos                               
                            files.historyImagesDelete(document, ref appConfig,ref threadConfig);
                        }
                    }
                    else
                        {
                            CriticalMessage criticalMessage = new CriticalMessage();
                            criticalMessage.sendMessage("Ocurrio un error al subir los documentos.", new Exception("Error inesperado: no se logro completar la operacion de subir documentos"), CriticalMessage.IIF_Error, 202, threadConfig.Name, false, ref appConfig);
                            result.documentsNoOk++;
                            files.errorImagesHistory(document, ref appConfig,ref threadConfig);
                           // 
                            //throw new Exception("No se pudo importar el archivo a IIF a infoImage.");
                        }
                    

                }
                infoMessage.sendMessage("Intentando cerrar seciones de IIF...", InfoMessage.Information_Message, 572, threadConfig.Name, ref appConfig);

                _infoImage.DestroyIIFClientExplicit();

                infoMessage.sendMessage("Seciones de IIF cerradas y escritorio limpio.", InfoMessage.Information_Message, 572, threadConfig.Name, ref appConfig);

            }
            else
            {
                CriticalMessage criticalMessage = new CriticalMessage();
                criticalMessage.sendMessage("Ocurrio un error al intentar conectar a IIF.", new Exception("Error inesperado: no se logro completar la operacion de subir documentos"), CriticalMessage.IIF_Error, 203, threadConfig.Name, false, ref appConfig);
                return result;
            }
            #endregion



            #region Subida de workitem

          
            #endregion
           
            return result;
        }

    }
}
